1. Field of the Invention
The present invention relates generally to systems and methods for optimizing the performance of remotely accessible computer directories, and especially to Lightweight Directory Access Protocol directories.
2. Background of the Invention
Whereas the determination of a publication, technology, or product as prior art relative to the present invention requires analysis of certain dates and events not disclosed herein, no statements made within this Background of the Invention shall constitute an admission by the Applicants of prior art unless the term “prior Art” is specifically stated. Otherwise, all statements provided within this Background section are “other information” related to or useful for understanding the invention.
Computer directories are essentially specialized databases of information in which the contained information is organized in a specific manner, such as a hierarchical manner. A computer directory can be accessed locally by the computer on which the directory is stored, or remotely over a computer network by another computer, program, method, or process.
Protocols and techniques for providing such remote directory access are well-known, some of which are open standards, and some of which are proprietary in nature. For example, the Lightweight Directory Access Protocol (“LDAP”) is a well-known open standard based upon, but simpler than, the X.500 protocol, which is also an open standard protocol Other protocols which offer similar functionality are Microsoft's Active Directory, and Novell Directory Service (“NDS”).
For the purposes of the present disclosure, an “approach” will refer to a tactical series of operations, decisions, and queries which are performed responsive to a certain “stimulus”, where “stimulus” is used to describe in a generic sense a set of inputs, commands, queries, or a combination of inputs, commands and queries. For example, query is developed to create a mailing list of all customers of a company who have purchased wool socks in the last year and who have looked at, but not purchased, hiking boots. The information needed may exist in several databases. So, an approach is developed, such as first accessing a database of sales orders, and extracting all sales orders which include socks. Then, using these sales order numbers, accessing a second database of customer names and addresses to extract all names and addresses to which the orders were shipped. Finally, these extracted names and addresses can be used to key into another database of web store records to find which of these customers added shoes to their shopping carts but did not make a purchase. This final set of reduced names and addresses would be the “result” or product of the “approach”.
As such, an approach usually includes access to multiple databases, and many conditional statements. More generalized approaches for interfacing to sets of databases are designed in order to handle a wide array of inputs, commands, and queries, such that one generalized program or method handles any of the range of input commands and queries by using conditional statements, accessing and evaluating contents of data stores, caches, etc., and proceeding until a result is produced.
However, these large, generalized approaches are often not efficient for most inputs, commands and queries, whereas their structures trade off efficiency for generality. Each of the conditional operations, and each of the conditional accesses to caches, for example, have a cost associated with them, such as processing time, consumption of processing resources, etc. If the conditional operation or access to a cache is not successful for a specific input scenario, then the potential benefit to the operation or access is not realized, but the cost of the operation is still incurred.
Some directory service programs attempt to improve on efficiency and performance by optimizing for “average” input scenarios. In such a strategy, the software or an administrator modifies the approach to maintain generality, but to streamline code path flow for what is believed to be the average input scenarios. This, however, often leaves many conditional operations in the code path. Further, through the averaging process (e.g. instrumentation, counting, measuring, etc.), strange and difficult to handle input scenarios may be included in the averaging results, thereby causing the generalized approach to be less optimal than possible.
Other directory service programs attempt to improve on efficiency by adding local storages of data, such as in caches, which is needed often. This actually increases resource consumption, and only improves performance for input scenarios which have successful cache “hits”, while decreasing performance for all other input scenarios where there is a cache “miss”.
Still other attempts to improve efficiency have included variations and combinations of these two approaches, such as caching data which is indicated as highly used by an average input scenario.